Bug clearing house

ABSTRACT

A computer-implemented system for managing software problem reports includes a registration sub-system to register software developers from multiple different developer organizations; an application store that makes a plurality of applications from a plurality of application developers available for acquisition by members of the public; an application bug tracker programmed to receive reports of problems with applications distributed using the application store, to receive data regarding the problems, and to associate the data with a particular application or developer of the particular application; and a report generator to produce one or more problem reports for a developer that has provided one or more applications, the problem reports including information about the data regarding the problems relating to particular applications submitted to the application store by the developer.

CROSS-REFERENCE TO RELATED APPLICATION

This application is a continuation application of U.S. application Ser.No. 13/111,791, filed on May 19, 2011, which claims the benefit under 35U.S.C. §119(e) of U.S. Provisional Application Ser. No. 61/346,453,filed on May 19, 2010, entitled “Bug Clearing House,” the entirety ofwhich is hereby incorporated by reference.

TECHNICAL FIELD

This document relates to management and distribution of informationabout problems with software applications.

BACKGROUND

Software development is a difficult business. A prospective softwaredeveloper must first train himself or herself in architecting andprogramming software. He or she must then stay up-to-date onever-changing programming languages and technologies. And he or she musthave an idea. The developer then needs to figure out how to implementthe idea through programming within the resources that are available onthe target computing platform, and within their own time and financialconstraints. In addition, he or she needs to have people test theprogram in different settings, and make corrections to fix bugs in theprogram. The developer must then figure out how to price and distributethe software and get people interested in it.

Advanced programming environments helps to resolve some of theseproblems—i.e., they make the organization and typing of code moreautomated. In addition, the recent advent of on-line app stores forwireless computing devices such as smart phones and netbooks has made itmuch easier for small developers to market and sell software. Both ofthese developments have made life better for software developers and forthe people who buy their software. Still, the life of a softwaredeveloper is a hard one. For example, it can still be difficult toobtain feedback from users of a program and to analyze that feedback inan effective manner. For example, many developers provide an email linkwith an application by which customers can provide feedback.

SUMMARY

This document discusses systems and techniques for managing reports ofproblems, or bugs, for software developers, and particularly forsoftware developers who sell and distribute applications through athird-party on-line app store for users of wireless mobile computingdevices such as smart phones. For example, a developer may be anindividual programmer who is registered with a system that provides apublic app store, so that the developer may upload applications to theapp store for the distribution of the applications to members of thepublic who are registered to make purchases from the app store—all in afamiliar and well-known manner. The particular software applications,and/or an operating system that executes on one or more mobile computingdevices, may be programmed to gather information when there is aproblem, or bug (e.g., the application crashes or freezes, consumes anexcessive amount of power, or a user of a device manually reports aproblem or an idea for improving the application), and may transmit dataabout the problem to a reporting sub-system that is associated with theapp store and operated by the same organization that operates the appstore.

The reporting sub-system may correlate each such incoming bug reportingsubmission (whether generated automatically by a device or manually by auser of the device) with a computer application to which the problem wasdirected (e.g., an application that was open and/or the focus of anoperating system when a freeze or crash occurred), and may storeinformation that characterizes the problem. The information may bestored in a manner so that it is associated with the application, and byextension, with a developer of the application. When the developer(which may be the individual who provided the software to the app store,or an agent of that individual) next logs onto the system, the developermay pull up reports regarding software applications they have uploaded,where the reports aggregate all of the data for all the reportedproblems for each such software application, and also show the natureand extent of problems with the applications.

Such reports may have certain information removed from them by thereporting sub-system, such as to maintain privacy for users whose mobilecomputing devices experienced the problems and generated thecorresponding data. The level of information that is provided by thesub-system to a developer can also depend on the level of trust that thesub-system has with the developer. Also, users may be notified regardingthe level of information that may be shared, and may choose to allow ordisallow such use of the information.

The reports may take various familiar forms, such as summary reportsthat show the frequency of occurrence of problems with an application orapplications, error reports that list all problems of a certain typewith an application and provide data that describes the problems (e.g.,in what portion of the code the problem occurred), and stack traces thatshow information about the status of each computing device when theproblem occurred on the device.

In addition, the system may generate data across multiple applicationsthat is useful more broadly for the third-party provider. For example,where the organization that operates the app store also provides theoperating system for the mobile devices that access the app store,problem data for multiple applications can be “rolled up” in variousmanners to create aggregate data and resulting reports to determinewhether there are problems with the operating system. For example, ifsuch data indicates that multiple different applications areexperiencing freezes when accessing a particular operating systemservice or interface, the third-party provider may be alerted that therecould be a problem with the code for the service or interface.

Such systems and techniques may, in certain implementations, provide oneor more advantages. For example, developers may be provided withdiagnostic capabilities that may otherwise be available only tosophisticated companies that have set up their own bug tracking systems,merely by using a particular development environment. Users of devicesmay receive improved applications from various developers, and may beallowed to report bugs in a convenient manner that is consistent acrossmultiple different applications from multiple different developers. Anda provider of a platform, such as an operating system and/or anassociated app store, may be able to improve the desirability of itsplatform to developers and users of devices.

In one implementation, a computer-implemented system for managingsoftware problem reports is discussed. The system comprises aregistration sub-system to register software developers from multipledifferent developer organizations. The system further includes anapplication store that makes a plurality of applications from aplurality of application developers available for acquisition by membersof the public. The system also includes an application bug trackerprogrammed to receive reports of problems with applications distributedusing the application store, to receive data regarding the problems, andto associate the data with a particular application or developer of theparticular application. Additionally, the system includes a reportgenerator to produce one or more problem reports for a developer thathas provided one or more applications, the problem reports includinginformation about the data regarding the problems relating to particularapplications submitted to the application store by the developer.

Implementations can include any, all, or none of the following features.The reports of problems can include problems selected from the groupconsisting of application crashes, application freezes, excessivebattery usage, and manually-invoked computing device user comments. Thesystem can also include a bug analyzer programmed to analyze reports ofproblems across multiple applications to identify whether the reports ofproblems indicate problems with particular computing device models or acomputer operating system. The bug analyzer further can identify thatreports of problems indicate problems with particular computing devicemodels or a computer operating system by identifying statisticallyhigher reporting frequencies with a particular device model or operatingsystem version. The system can be arranged to limit information providedto the developer based on a trust level that identifies how muchinformation about users of the particular application that the developeris authorized to obtain. The system can additionally be programmed tolimit information provided to the developer based on whether thedeveloper is a developer of a core application from an organization thatmanages an operating system for a device on which a particular problemoccurred.

Also, the system can be arranged to group information about problemsaccording to the type of problem. The system can be arranged to provideinformation indicating a device type and operating system identifier fora device on which a particular problem occurred. The system can furtherinclude a developer upload interface that accepts uploads ofapplications from developers and correlates each application with adeveloper account through which the application was uploaded. The systemcan be programmed to present to a developer, bugs sorted by a severitylevel that is determined from a rate at which different bugs for theparticular developer.

In one aspect, a computer-implemented method for managing softwareproblems includes receiving, at a central server system, a plurality ofsoftware application problem reports from a plurality of differentcomputing devices that are remote from the central server system. Thesystem further includes associating particular ones of the problemreports with particular applications provided by particular softwaredevelopers. Additionally, the system includes receiving identificationinformation from one developer of the particular developers. The systemalso includes, in response to receiving the identification information,providing the one of the particular developers with informationdescribing problem reports for the particular applications managed withthe central server system by the one developer.

Implementations can include any, all, or none of the following features.The software application problem reports can include reports relating tofreezes, crashes, and user-generated comments. Additionally the softwareapplication problem reports can include trace data for a device thatgenerated a particular problem report, and information aboutconfiguration of the device. The system can further include receivingsoftware application uploads from a plurality of software developers,correlating each application to a developer account for the application,and correlating.

The details of one or more embodiments are set forth in the accompanyingdrawings and the description below. Other features and advantages willbe apparent from the description and drawings, and from the claims.

DESCRIPTION OF DRAWINGS

This document discusses various systems and techniques that may be usedto provide feedback on the operation of software applications. Inparticular examples, a distributed group of software developers who areindependent of each other (e.g., do not work for the same company,operate from the same domain, or share a common software developmentsystem) may upload their software applications to an app store fromwhich various users of computing devices may review and download theapplications, frequently paying to purchase or license the applications(where the respective developer will receive a share of the payment). Anoperating system on the devices may perform ordinary error handling ofproblems on the device, including by keeping stack traces and reportingsuch information to a central server system when there is a problem, orbug, with a device. Such information is commonly used by trainedindividuals in an attempt to diagnose the source of the problem so thatremedial measures may be taken and the relevant software code may becorrected and updated.

In the examples discussed here, a portion of the data submitted from thevarious computing devices may also be made available for review by thedeveloper who submitted the code that caused the problem or was activewhen the problem occurred. Such an operation may occur by the operatingsystem identifying the relevant application or applications when aproblem occurs, and submitting, to a central server system, informationabout the problem along with information that identifies the applicationor applications. The central server system may then store the data inassociation with a software application identifier, and such anidentifier may be further used to identify a developer of theapplication. When such developer (which may be a wholly differentindividual or organization than the operator of the app store oroperating system) logs into the system and asks for a report of problemswith his or her code, the system may query a database where the problemdata is stored, to locate all data for the particular developer, and maygenerate one or more reports that filter and group the data in variousways. As one example, personally identifiable information may be removedfrom the data that is provided for the report or it may be obscured.Also, the data may be sorted according to each application so that adeveloper can quickly obtain an understanding about the relativeoperation of each of their applications if they have many suchapplications.

FIG. 1A is a conceptual diagram showing a system 100 for distributingsoftware from multiple developers and collecting information about theoperation of the software. In general, the system 100 includes a centralserver system that sits between a group of developers and a group ofusers (where, of course, certain of the developers may also be users,and vice-versa). The central server system receives software codeuploads from developers, provides code downloads to users, receiveserror or problem data from the users, and filters and organizes suchdata for presentation to the developers.

Referring now more specifically to the figure, the central server systemis shown here in the form of an application center 102. The applicationcenter 102 includes physical and logical components that make up a usercenter 108 and a developer center 110. Such components may include, forexample, front ends or web servers that generate user interfaces forproviding services to users and developers, respectively. The usercenter 108 communicates with users 104, who are each individuals in thisexample who have acquired a mobile telephone, or app phone, that runs aparticular software operating system developed by the operator of theapplication center 102. As part of the overall service provided with theoperating system, the operator makes the application center 102available for the review and purchase of software applications for themobile devices. Thus, for example, User A (e.g., a teenager) may havedownloaded a number of videogames, while User B (e.g., a businesswoman)may have downloaded various business applications that make use ofhosted cloud-based computing platforms, and User C (e.g., a collegestudent) may have downloaded an e-book reader application (with a numberof e-book textbooks) and a variety of test preparation application,along with a mathematical modeling application. In each situation, therelevant user may launch each of their downloaded applications (whichmay supplement applications that were shipped with their telephone) andinteract with them in familiar manners. They may also revisit theapplication center 102 to locate and download additional applications,as the need may arise.

From time to time, problems may occur on each of the users' 104 devices.For example, a user may be running a number of applicationssimultaneously, and may create a memory overflow condition that causesone of the applications to crash. Alternatively, an application mayperform an operation that causes it to lock up, so that a user will needto close out a process in which the application is executing.Alternatively, a user of the device may invoke a problem submissionprocess by which the user is allowed to fill out a form to identify anerror in an application or to suggest improved features for theapplication. Each of these instances and similar instances will bedescribed collectively here as bugs, in that they indicate a problemwith the software application for which feedback needs to be given tothe developer of the application (though it may be determined that theproblem is, in the end, attributable to the operating system, the devicehardware, or another application).

As shown here, the applications may be acquired from the app store 112,which may take a familiar form, such as a web site from whichapplications submitted by third-parties (in addition to some first-tierapplications submitted by the operator of the app store 112) can bedisplayed as part of a web page on which are also displayed controlsthat, when selected by a user, cause the particular selected applicationto be supplied or downloaded to a device that is logged into the user'saccount with the system 100.

The user center 108 also includes a bug collector 116, which includescomponents for automatically communicating with the instances of theapplications that are distributed to the users' 104 devices eitherdirectly, or via operating system components that report on theoperation of the instances of the applications. The bug collector mayalso reformat the collected information for persistent storage, such asby arranging the data in one or more databases that include informationsuch as the time and date of a submission, the operating system andversion on the device, the make and model of the device, otherapplications that were executing on the device when the problem eventoccurred, traces of recent device activity, configuration data for thedevice, and other similar information.

The other “side” of the application center 102 points toward developers106, which, like the users 104, may be very large in number andgeographically dispersed. In particular, the users 104 and developers106 may be spread across the world and may access the application center102 through various networks, including the internet. As one example,the system 100 may have thousands or tens of thousands of activedevelopers 106, and hundreds of thousands or millions (or even hundredsof millions) of active users 104. The techniques described here workparticularly well in such systems with large developer bases, as moreuser data may be supplied to each developer, and developers in suchsystems are more likely to be small, and not able to develop bugreporting systems of their own.

The first main component in the developer center 110 is an app manager114. This component may be the flip-side of the app store 112 for users.In particular, the app manager 114 can include a web server andassociated software that developers may access, and interact with, inorder to register themselves as legitimate developer members of thesystem 100, and to subsequently upload code for applications that theyhave authored or for which they are managing the commercialdistribution. The app manager 114 may also provide a number ofadditional services, which are generally well known, for interactingwith developers and allowing the developers to conveniently manage theirapplications

The bug reporter 118 serves as the developer-side counterpart to the bugcollector 116, and completes the software distribution and feedbackcycle that starts at the developers 106, moves to the app manager 114and the app store 112, then to the users 104 who acquire and execute theapplications, and back to the bug collector 116, bug reporter 118, anddevelopers 106, when a problem arises with the software (thoughoptimistic developers would refer to them as opportunities).

The bug reporter 118 in particular may provide for a web server systemto interact with the developers 106 and a report generating facility toprovide data about problems experienced by the users' 104 devices, withrespect to applications that correspond to the respective developers.The reports may be of a standard or custom format. Standard reports maybe developed by the operator of the application center 102 (which isshown as a single entity here, but could be operated by multipledifferent organizations working in cooperation with each other) and maybe accessed and generated easily by developers looking to see how theirrespective applications are performing. Custom reports may be formed byeach individual developer, and may use graphical report developmenttools that are well known. For example, a developer may selectparticular fields of data they would like to see in their reports, andmay define the visual look of their reports. They may also receivereports in the form of raw data (both in batch form and in real time asreporting incidents occur among the users 104), and may use their ownfacilities to manipulate and report on the data. In addition, developers106 may define aggregate reports that they would like to see. Forexample, if they have developed a suite of products (e.g., a businessproductivity suite), they may want a report that includes a section forparameters that are common to each component of the suite, and separatesections for each of the components and data that is specific to theparticular component.

In these manners, the system 100 may provide developers 106 withextensive and helpfully formatted data concerning bugs in their softwarethat may need attention. A particular developer may need to do nothingwith respect to their software in order to get certain data (other thanproviding a mechanism by which an operating system can identify theapplication when it is executing). In certain instances, developers maycause additional data to be reported, such as via an API, but again, thedeveloper would not need to implement a full system for receiving bugsubmissions, for gathering data on the client devices, and for otherwiseimplementing a full application maintenance system. As a result, entrylevel developers may gain the benefit of a program for improving theirapplications, and consumers of the applications may in turn benefit.

FIG. 1B is a flow diagram showing operations for providing feedback onthe operation of software applications. In general, a graphical timelineis shown here, starting in the upper left corner and ending in the lowerright, to explain an example by which an application developer can makehis or her software application available to the public and may receivefeedback on the operation of the application, and may thereby readilyand quickly improve the application.

At operation 120, an application developer submits an application to amobile application market. The submission may occur in a variety ofappropriate manners, and the developer may provide the application witha self-signed certificate that helps to legitimize the application andprovide security in the system. Operation 122 shows the presence of theapplication in the mobile application market, along with three otherapplications that may have been previously uploaded by the samedeveloper or by other developers. The “ownership” of the applicationsmay be maintained by correlating the application to an account of theuser who uploaded the application, which would ordinarily be the actualdeveloper or someone working on behalf of the developer.

At operation 124, a user of a mobile computing device (e.g., a smartphone or app phone) has visited the mobile application market and hasidentified himself or herself, by being logged into the system under hisor her account. The user has then selected the application that wasuploaded at operation 120, and the application has been installed andmade ready for execution by the user of the mobile device, in a mannerthat is well known.

At operation 126, an icon of an explosion indicates the occurrence of anerror while the application is running on the mobile device. The errormay involve a crash or locking situation, or could result from a user ofthe device manually indicating an intent to provide feedback regardingthe application. Such an event may cause diagnostic information aboutthe event to be gathered on the device, such as by an operating systemcomponent that executes on the device.

At operation 128, a report regarding the error is generated on themobile device 128—an action that may occur under the control of anoperating system that managed the operation of the mobile device and thevarious applications on the device. For example, an operating system maybe programmed to recognize when a process ends unsuccessfully on thedevice, and such an event may trigger a number of data gathering andformatting operations by the operating system. For example, the currentcontents of traces, stacks, resisters, or other entities may bedetermined, as may identifiers for all software components that wereexecuting on the device when the error occurred. Such information maythen be gathered together into a predefined packet of informationaccording to an agreed-upon standard.

At operation 130, the report or submission is shown as it may exist, atleast conceptually, on a central server system that is tasked withtracking and reporting on such reports. In this example, the report hasbeen classified as corresponding to a particular bug for theapplication, where three different bugs have been identified. Suchclassification may occur, for example, by identifying which piece ofcode was executing when the relevant error occurred, and providing anidentifier for that piece of code, so that the particular reports may bejoined together in producing a bug report. Identification of bugs to beassigned to particular error submissions may be performed in other waysalso, including by manual classification by a user of the bug tracingsystem. As shown here, two other bugs have been identified, and therehave been two and three error submissions, respectively, for those bugs.Thus, in this example, over a period of time, the initial applicationhas been identified as corresponding to eight different errorsubmissions.

Such information may be important for the developer of the applicationto know. For example, one of the three bugs may be important to thesatisfaction of users of the application. If the developer could quicklysee the nature of such a bug, the developer might be able to correct itquickly and supply a “patch” for the code (and the patch may be pushedout automatically to all users who have downloaded the application(though they may be given the opportunity to reject such an update).

At operations 132 and 134, such a developer has chosen to see a reportregarding all that developer's bug submissions. In this example, thereare three bugs being tracked in the entire system, but as shown inoperation 134, only two of the bugs were associated with the applicationfrom operation 120. The mobile application market or similar sub-system,in this example, may thus readily generate a report that showsinformation about the particular errors and information that identifiesto the developer the nature of the bug that is being tracked by thesystem.

In certain instances, the data provided in the final report may besubstantially different than the data uploaded in the submissions fromthe mobile devices. For example, personally identifiable information maybe stripped from the uploaded data, so that developers cannot makeparticular determinations about the users of devices. In one example,only stack traces and similar information about the device at the timeof the crash may be provided but other information (e.g., informationthat might reflect the data the user was manipulating when the problemoccurred), will not be passed. Also, certain levels of detail may berelevant to the central system, but may be irrelevant to mostdevelopers, and may thus be stripped out of the report at operation 134.

FIG. 2 is a schematic diagram of a system 200 for tracking submissionsfrom computing devices regarding the operation of software applicationson those devices. The system 200 may be used to carry out actions likethose discussed with respect to FIGS. 1A and 1B above. The system 200 isshown for clarity in a highly simplified form, and in a particularphysical implementation may include a large number of additionalcomponents.

Referring now to the figure, there is shown a system 200 by whichvarious developers 212, shown by example using laptop and desktopcomputers, may submit applications to an app server system 202, and mayreceive in return money and feedback about the operation of theirparticular respective submitted applications. Such applications may bepurchased or otherwise obtained by a variety of users 210 who are shownhere via wireless mobile devices that are capable of downloading andexecuting the applications.

The developers 212 and users 210 (or more technically, their devices)generally do not communicate with each other directly, but may insteadcommunicate through the app server system 202, using a network 204 suchas the internet. Such open communication may allow a wide variety ofdeveloper types and users to make use of the system 200.

Particular components in the app server system 202 may provide forfunctionality in deploying and tracking the use of software applicationsby the system 200. For example, a marketplace front end 214 may generatea user interface that displays available applications to the users 210,and allows the users to review, try, and download such applications. Amarketplace manager 218 may provide back end support for the marketplacefront end 214, such as by tracking purchases, generating billing to theusers 210 and remittance to the developers 212, and other well-knownfunctions of an app store implementation.

A developer front end 216 may generate a user interface that permitsdevelopers to register with the system 200, upload applications, managetheir applications (e.g., update, add, and delete applications, and seehow much money they have made selling applications), and receivefeedback on the operation of their applications, as described above andbelow. In providing such feedback, the front end 216 may access a bugreport generator 220, which may manage the uploading of data from mobiledevice on which bugs have occurred (e.g., as identified by crashes,freezes, and manual user reports). For example, the bug report generatormay be responsible for receiving bug report data from the user devices,formatting it appropriately for storage, such as in bug repository 222,and then retrieve all or part of the stored data when a developerrequests to see reports regarding his particular applications.

The bug report generator 220 or the developer front end 216, or acombination of the two, may filter and format such data appropriatelyfor delivery to a developer. For example, the two components cancooperate to generate a web page and send the page to the developer inresponse to a developer's request for a report. Likewise, the data maybe effectively streamed to a developer who has asked for a syndicatedfeed of data, so that the developer may see bug reports in real time asthey arrive at the system 200. Such real time reporting may occur invarious manners, such as SMS messages to the developer, XML transfers(so that, e.g., the developer may use analysis tools in its own systemto organize the various bug reports), and other such mechanisms.

Various data stores are also shown in the figure to exemplify forms ofdata that may be stored, accessed, and managed by the system 200. Forexample, as noted above, a bug repository may store information aboutbug reports that have come up from users 210. The bug information mayinclude diagnostic information that would allow a developer or othertechnical person to infer (at least in part, and at least some of thetime, or in combination with other bug reports) what went wrong when thebug event occurred. The bug repository may also, in certaincircumstances, include information that should be accessible internallyto the system 200, but not to developers 212. Such information may befiltered in appropriate manners by, for example, bug report generator220 and/or developer front end 216.

A credentials database 224 may store credentialing information for thedevelopers 212 and users 210. The credentials may allow the variouspeople to access relevant information that is associated with theiraccounts, and to pay or receive money for the purchasing and selling ofapplications through the system 200. Also, credentials may be used todetermine an appropriate level of access by a particular user to certaindata. For example, a third-party developer may have their credentialsassociated with a limited access level, so that when they requestreports on bugs with their applications, personal information isfiltered out so as to maintain anonymity for the users of theapplications. In contrast, inside users may have greater access to dataabout faults on the user devices.

Finally, an apps data store 226 stores applications that are madeavailable to the users 210, including apps that have been uploaded bythe developers 212, and apps that may have been placed on themarketplace initially by the operator of the system 200.

Outside of the server system 202, a local developer 206 is also shown inthis example, and may be within the same domain as the app server system202, and communicate over a private network 208 with the app serversystem 202. The local developer is a programmer who is trusted by theapp server system 202 operator, such as an employee of the organizationthat runs the app server system. Such a user may be identified by theapp server system 202 in a variety of manners, and the developer frontend 216 may thus provide the developer 206 with greater access to errordata and access to more powerful tools for analyzing the data. In otherwords, the developer 206 may be treated by the system 200 as adeveloper, but as being different than the other developers 212.

As one example, certain of the users 210 may have consented to havingcertain personally identifiable data provided to the organization thatprovided the app server system 202, but may have declined to have suchinformation shared with third-parties. The local developer 206 would beable to access more information in such a situation than woulddevelopers 212. Such a situation may be particularly desirable from theviewpoint of the users 210, because frequently the local developer 206generates some of the most useful and universally deployed applicationsin a system (e.g., word processing and electronic mail), and users maywant to give such developers everything they need to improve theprograms.

FIG. 3 is a flowchart of a process for managing software problemreports. In general, the process involves receiving computer code forvarious computer applications from developers of the applications, andmaking the applications available for download and perhaps for purchaseby members of the public at an application marketplace. After thevarious applications are installed on various computers for registeredusers of the system, the applications may begin to generate alerts(e.g., when there is a crash or other problem), information about suchalerts may be relayed back to the operator of the applicationmarketplace, and the information may be made available to thecorresponding developer who submitted the particular applications thathad the events, so that that developer may improve and edit the code forhis or her applications.

The process begins at box 302, where the process receives an upload ofapplications by a developer. The developer may be, for example, anindividual programmer working out of his home, who has written a simpleapplication to solve a particular niche problem in a particular field,such as a calculator for carpenters, a search tool for a particularprofession, or other similar applications that may be executed on amobile computing device. The developer may alternatively include a groupof individuals, such as a small software company that makes its businessout of developing applications such as those sold on the applicationmarketplace. Generally, the developer is the party who has a rightfulclaim to revenue generated by selling the application, or benefitderived from otherwise distributing the application to various users.

At box 304, the application is made available on the marketplace. Suchoperation may occur in a familiar manner, and may include the posting ofan icon and a textual description of the application, both of which willhave been provided to the marketplace by the developer. The applicationmay be made available for purchase for payment, or may be made availablefor free download, which is also well-known in the art.

At box 306, instances of the application are delivered to buyers whocommunicate an interest in receiving a copy of the application. As aresult, a copy of the application may be downloaded to a mobile deviceassociated with the user account of the user who is accessing theapplication store or marketplace. The user may then take appropriateactions to install the application and to get it executing on theirdevice, either at the same time they purchased it, or at a later time ortimes. Thus, the user of a device who has downloaded a particularapplication, and other users who have downloaded the application, mayaccess the applications and interact with it as they see fit.

Such interaction with the application may raise problematic issues withthe operation of the application. One such issue includes a malfunctionof the application that may lead to a crash or a hang up of theapplication (or the process in which the application is executing).Another issue may be a dis-satisfaction with the application by theuser, either because the application is performing incorrectly orbecause the user believes that the application could perform better withcertain improvements. In such a situation, a particular client devicefor the user may gather data either automatically from the device ormanually from the user to characterize the parameters of the event. Thevarious data described above may be gathered, in certainimplementations, by a component of the operating system or theapplication, and include information like that discussed above, inaddition to other data such as a current screenshot of the device at thetime of the event, and also information that might be input to thedevice by the user of the device, such as words indicating the sort offeature that a user would like added to the application. Once suchdiagnostic information has been gathered, it may be transmitted from theclient device to a server system, which may then format and save theinformation about the alerts and other alerts received from other clientdevices (box 310).

In performing such formatting and filtering, the central server systemmay also identify common parameters between data for different events inan effort to identify events that represent the same bug occurring foran application. For example, if trace information for two differentevents matches very closely to each other, the system may infer thatboth events were the result of a common bug. Certain parameters fordetermining whether two events result from the same bug may be weighted,while other parameters may be determinative of whether the bug to whichthe event is classified relates to a particular parameter. Each of suchidentified bugs may be assigned an identification number that may beused subsequently to create a correlation between different alert datathat is determined to have a common bug, and to provide for grouprecording of alerts and bugs to developers of software in the system.

At box 312, the process formats and delivers, to a developer of aparticular application or applications, bug information about theircorresponding application or applications. As discussed above, a reportmay take a variety of forms, including a printed report on the webpage,a block of data such as in XML format, or a stream of data that involvesa data transmission every time an event is reported or a group of eventsare reported to the process by various client devices that are runningan application. In this manner, a developer may obtain, and a userand/or user's device may provide, information about bug-created eventsthat occur on the user's device.

FIG. 4 is a swim lane diagram of a process for managing submissions ofproblems with software from multiple developers, where the software isinstalled across multiple mobile computing devices. This process issimilar to the process of FIG. 3, but shows more detail about particularexample operations that may be performed by particular components in asystem. The process begins at box 402, where a developer develops asoftware application. Such development may include architecting theapplication, drafting code for the application and packaging andotherwise arranging portions of code for the application. Once theapplication is ready to be used, the developer may register and login(box 404) to an application store server system in a familiar manner,and the server system may start an interactive session with thedeveloper in this manner (box 406). After providing appropriate forms ofmetadata regarding the application, such as a title for the application,a price to be charged for the application, it is textual description ofthe application, the icon for the application to be presented on auser's device and on applications store, and other appropriate data, theuser or developer may upload their application or applications with thenecessary metadata (box 408).

At box 410, the applications store servers register the application,create a space for storing it, along with the data that describesparameters of the application, and host the application in an availablemanner on the applications store.

At some later point in time, a user who is browsing the applicationsstore finds the application and wants to purchase it. At box 414, theuser registers and logs in with the applications store, which in turnstarts a session with the user (box 416).

At box 418, the user supplies a command to download the application,such as by clicking on an icon for the application, and then selecting aparticular on-screen selectable control to confirm that the user wantsto purchase and obtain the application. At box 420, the applicationstore checks the user's credentials to ensure that the user has anaccount with the applications store, and then provides the applicationto the user if the user does have such an account. Alternatively, theservers may determine that the user does not have an account, and mayrequest such information from the user in a conventional manner,including by requesting credit card information from the user for payingfor downloaded applications in the future.

Once the user has downloaded the application, they may begin using it,and such use may, in certain circumstances, generate an error or problemevent, as shown at box 422. Examples of error events are provided above,and may include freezing of the device, crashing of the device, ormanual reports from a user regarding suggested improvements or problemswith an application. The user's device then reports such an event, alongwith diagnostic information for the event, to a bug server at box 424,where the data may be received and recorded. Such transmission from theclient device may occur via operating system components, by theparticular application suffering the event, or by a differentapplication that is resident on the device. The particular interactionbetween the device and the bug servers may be established by an APIstandard, and may follow that standard so that the data is transferredappropriately.

The process may then wait for a while, and other users may executeapplications on their devices, which may in turn report data aboutproblems on those devices. At some later point, however, the developermay wish to see if the application is operating properly, and may thuslogin (box 226) at the end, though this time, he may be provided withinformation from the bug servers, which may start a session at box 428.One common interaction may include a request for one or more reports(box 430) made by a computing device operated by the developer, and thebug servers, at box 432, may serve the requested report back to thedeveloper. Such serving may include organizing error events dataaccording to particular posts that have been identified by the bugservers, and filtering data so that the developer receives only the datathey need in order to make an informed decision, and so they do notreceive data that they should not have access to. Finally, at box 434,the developer's device displays the records or reports, such as on a webpage, so that the developer may review them and may make decisions aboutwhether and how to update their software in order to address errors thatmay have been occurring on one or more devices.

FIGS. 5A and 5B are example screen shots of a mobile computing deviceexperiencing operational problems with a software application. Ingeneral, these screenshots show two examples of screens that may begenerated on a client device, such as by an operating system componentor by an application, when an error event occurs. The screen shot inFIG. 5A shows a warning screen that has been generated because aparticular process has stopped unexpectedly. The screen shot instructsthe user about what has happened, and then gives the user two optionsfor responding. In particular, the user can select “force close” to shutdown the process, and by extension shut down the application, with theunderstanding that they could lose data doing so. The user may alsoselect to report information about the problem, where the user isopen-minded and wishes to help the developer of the application or theoperating system improve the software so that similar unexpectedstoppages do not occur in the future.

The user's selection of the “report” option causes the screen shot ofFIG. 5B to be displayed. Here, the user is shown parameters that controlhow the problem will be reported to a central server system. Inparticular, the appropriate privacy policy to be applied to thetransmission may be displayed for the user's review, and the user may beprovided with appropriate controls for correcting or updating theprivacy policy. In addition, the user is presented with an empty textbox where he or she can optional describe the context of theproblem—e.g., “I was typing xyz into the abc application, whilesimultaneously talking on the phone, converting a video with Handbrake,doing number-crunching for SETI, and playing a full res first personshooter, when for no good reason, the application hung up on me”. Suchtext may be passed as a field with other diagnostic information aboutthe problem. In certain circumstances, a user could be given theopportunity to have their contact information provided to the developerin case the bug is particularly thorny and the developer needs to emailor call the user. Alternatively, the user may not be asked initially toprovide any contact information, but the developer, upon reviewing thecomment, could place a request for contact information, and the systemwould then generate a message that thew user could respond to.

The user may then select the “preview” button to be given a view of allthe data that will be uploaded about the problem, or “send” to causesuch upload of the information.

FIGS. 6A-6C are example screen shots of developer reports generated by asoftware tracking system. FIG. 6A shows summary statistics about bugsfor the application com.android.launcher2. For example, the total numberof reports or submissions from client devices is show, as is the currentrate of submissions—both for freezes and crashes.

In another instance, information about device battery power and usagemay be reported with information about executing applications. Forexample, if a battery falls in power suddenly, diagnostic informationmay be uploaded from the device so that a central researcher candetermine the source of the electoral demand. For example, if aparticular application is frequently shown as being active whenever suchevents occur, a central system might infer that that application is thesource of the battery drain.

FIG. 6B is a similar summary report, though for a number of differentapplications or code files. For example, the name of the code is shownalong with its context when it failed, the number of reports for suchfailing, and current rate of such events.

FIG. 6C shows a more detailed report about a particular failure of aparticular application, and shows much more information about thecontext of the failure. For example, the stack traces for the device areshown in the report, as is certain other helpful information. Some ofthe information may be hyperlinked so that a user may see additionalsource data for what is displayed here.

FIG. 7 shows an example of a generic computer device 700 and a genericmobile computer device 750, which may be used with the techniquesdescribed here. Computing device 700 is intended to represent variousforms of digital computers, such as laptops, desktops, workstations,personal digital assistants, servers, blade servers, mainframes, andother appropriate computers. Computing device 750 is intended torepresent various forms of mobile devices, such as personal digitalassistants, cellular telephones, smartphones, and other similarcomputing devices. The components shown here, their connections andrelationships, and their functions, are meant to be exemplary only, andare not meant to limit implementations of the inventions describedand/or claimed in this document.

Computing device 700 includes a processor 702, memory 704, a storagedevice 706, a high-speed interface 708 connecting to memory 704 andhigh-speed expansion ports 710, and a low speed interface 712 connectingto low speed bus 714 and storage device 706. Each of the components 702,704, 706, 708, 710, and 712, are interconnected using various busses,and may be mounted on a common motherboard or in other manners asappropriate. The processor 702 can process instructions for executionwithin the computing device 700, including instructions stored in thememory 704 or on the storage device 706 to display graphical informationfor a GUI on an external input/output device, such as display 716coupled to high speed interface 708. In other implementations, multipleprocessors and/or multiple buses may be used, as appropriate, along withmultiple memories and types of memory. Also, multiple computing devices700 may be connected, with each device providing portions of thenecessary operations (e.g., as a server bank, a group of blade servers,or a multi-processor system).

The memory 704 stores information within the computing device 700. Inone implementation, the memory 704 is a volatile memory unit or units.In another implementation, the memory 704 is a non-volatile memory unitor units. The memory 704 may also be another form of computer-readablemedium, such as a magnetic or optical disk.

The storage device 706 is capable of providing mass storage for thecomputing device 700. In one implementation, the storage device 706 maybe or contain a computer-readable medium, such as a floppy disk device,a hard disk device, an optical disk device, or a tape device, a flashmemory or other similar solid state memory device, or an array ofdevices, including devices in a storage area network or otherconfigurations. A computer program product can be tangibly embodied inan information carrier. The computer program product may also containinstructions that, when executed, perform one or more methods, such asthose described above. The information carrier is a computer- ormachine-readable medium, such as the memory 704, the storage device 706,memory on processor 702, or a propagated signal.

The high speed controller 708 manages bandwidth-intensive operations forthe computing device 700, while the low speed controller 712 manageslower bandwidth-intensive operations. Such allocation of functions isexemplary only. In one implementation, the high-speed controller 708 iscoupled to memory 704, display 716 (e.g., through a graphics processoror accelerator), and to high-speed expansion ports 710, which may acceptvarious expansion cards (not shown). In the implementation, low-speedcontroller 712 is coupled to storage device 706 and low-speed expansionport 714. The low-speed expansion port, which may include variouscommunication ports (e.g., USB, Bluetooth, Ethernet, wireless Ethernet)may be coupled to one or more input/output devices, such as a keyboard,a pointing device, a scanner, or a networking device such as a switch orrouter, e.g., through a network adapter.

The computing device 700 may be implemented in a number of differentforms, as shown in the figure. For example, it may be implemented as astandard server 720, or multiple times in a group of such servers. Itmay also be implemented as part of a rack server system 724. Inaddition, it may be implemented in a personal computer such as a laptopcomputer 722. Alternatively, components from computing device 700 may becombined with other components in a mobile device (not shown), such asdevice 750. Each of such devices may contain one or more of computingdevice 700, 750, and an entire system may be made up of multiplecomputing devices 700, 750 communicating with each other.

Computing device 750 includes a processor 752, memory 764, aninput/output device such as a display 754, a communication interface766, and a transceiver 768, among other components. The device 750 mayalso be provided with a storage device, such as a microdrive or otherdevice, to provide additional storage. Each of the components 750, 752,764, 754, 766, and 768, are interconnected using various buses, andseveral of the components may be mounted on a common motherboard or inother manners as appropriate.

The processor 752 can execute instructions within the computing device750, including instructions stored in the memory 764. The processor maybe implemented as a chipset of chips that include separate and multipleanalog and digital processors. The processor may provide, for example,for coordination of the other components of the device 750, such ascontrol of user interfaces, applications run by device 750, and wirelesscommunication by device 750.

Processor 752 may communicate with a user through control interface 758and display interface 756 coupled to a display 754. The display 754 maybe, for example, a TFT LCD (Thin-Film-Transistor Liquid Crystal Display)or an OLED (Organic Light Emitting Diode) display, or other appropriatedisplay technology. The display interface 756 may comprise appropriatecircuitry for driving the display 754 to present graphical and otherinformation to a user. The control interface 758 may receive commandsfrom a user and convert them for submission to the processor 752. Inaddition, an external interface 762 may be provide in communication withprocessor 752, so as to enable near area communication of device 750with other devices. External interface 762 may provide, for example, forwired communication in some implementations, or for wirelesscommunication in other implementations, and multiple interfaces may alsobe used.

The memory 764 stores information within the computing device 750. Thememory 764 can be implemented as one or more of a computer-readablemedium or media, a volatile memory unit or units, or a non-volatilememory unit or units. Expansion memory 774 may also be provided andconnected to device 750 through expansion interface 772, which mayinclude, for example, a SIMM (Single In Line Memory Module) cardinterface. Such expansion memory 774 may provide extra storage space fordevice 750, or may also store applications or other information fordevice 750. Specifically, expansion memory 774 may include instructionsto carry out or supplement the processes described above, and mayinclude secure information also. Thus, for example, expansion memory 774may be provide as a security module for device 750, and may beprogrammed with instructions that permit secure use of device 750. Inaddition, secure applications may be provided via the SIMM cards, alongwith additional information, such as placing identifying information onthe SIMM card in a non-hackable manner.

The memory may include, for example, flash memory and/or NVRAM memory,as discussed below. In one implementation, a computer program product istangibly embodied in an information carrier. The computer programproduct contains instructions that, when executed, perform one or moremethods, such as those described above. The information carrier is acomputer- or machine-readable medium, such as the memory 764, expansionmemory 774, memory on processor 752, or a propagated signal that may bereceived, for example, over transceiver 768 or external interface 762.

Device 750 may communicate wirelessly through communication interface766, which may include digital signal processing circuitry wherenecessary. Communication interface 766 may provide for communicationsunder various modes or protocols, such as GSM voice calls, SMS, EMS, orMMS messaging, CDMA, TDMA, PDC, WCDMA, CDMA2000, or GPRS, among others.Such communication may occur, for example, through radio-frequencytransceiver 768. In addition, short-range communication may occur, suchas using a Bluetooth, WiFi, or other such transceiver (not shown). Inaddition, GPS (Global Positioning System) receiver module 770 mayprovide additional navigation- and location-related wireless data todevice 750, which may be used as appropriate by applications running ondevice 750.

Device 750 may also communicate audibly using audio codec 760, which mayreceive spoken information from a user and convert it to usable digitalinformation. Audio codec 760 may likewise generate audible sound for auser, such as through a speaker, e.g., in a handset of device 750. Suchsound may include sound from voice telephone calls, may include recordedsound (e.g., voice messages, music files, etc.) and may also includesound generated by applications operating on device 750.

The computing device 750 may be implemented in a number of differentforms, as shown in the figure. For example, it may be implemented as acellular telephone 780. It may also be implemented as part of asmartphone 782, personal digital assistant, or other similar mobiledevice.

Various implementations of the systems and techniques described here canbe realized in digital electronic circuitry, integrated circuitry,specially designed ASICs (application specific integrated circuits),computer hardware, firmware, software, and/or combinations thereof.These various implementations can include implementation in one or morecomputer programs that are executable and/or interpretable on aprogrammable system including at least one programmable processor, whichmay be special or general purpose, coupled to receive data andinstructions from, and to transmit data and instructions to, a storagesystem, at least one input device, and at least one output device.

These computer programs (also known as programs, software, softwareapplications or code) include machine instructions for a programmableprocessor, and can be implemented in a high-level procedural and/orobject-oriented programming language, and/or in assembly/machinelanguage. As used herein, the terms “machine-readable medium”“computer-readable medium” refers to any computer program product,apparatus and/or device (e.g., magnetic discs, optical disks, memory,Programmable Logic Devices (PLDs)) used to provide machine instructionsand/or data to a programmable processor, including a machine-readablemedium that receives machine instructions as a machine-readable signal.The term “machine-readable signal” refers to any signal used to providemachine instructions and/or data to a programmable processor.

To provide for interaction with a user, the systems and techniquesdescribed here can be implemented on a computer having a display device(e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor)for displaying information to the user and a keyboard and a pointingdevice (e.g., a mouse or a trackball) by which the user can provideinput to the computer. Other kinds of devices can be used to provide forinteraction with a user as well; for example, feedback provided to theuser can be any form of sensory feedback (e.g., visual feedback,auditory feedback, or tactile feedback); and input from the user can bereceived in any form, including acoustic, speech, or tactile input.

The systems and techniques described here can be implemented in acomputing system that includes a back end component (e.g., as a dataserver), or that includes a middleware component (e.g., an applicationserver), or that includes a front end component (e.g., a client computerhaving a graphical user interface or a Web browser through which a usercan interact with an implementation of the systems and techniquesdescribed here), or any combination of such back end, middleware, orfront end components. The components of the system can be interconnectedby any form or medium of digital data communication (e.g., acommunication network). Examples of communication networks include alocal area network (“LAN”), a wide area network (“WAN”), and theInternet.

The computing system can include clients and servers. A client andserver are generally remote from each other and typically interactthrough a communication network. The relationship of client and serverarises by virtue of computer programs running on the respectivecomputers and having a client-server relationship to each other.

A number of embodiments have been described. Nevertheless, it will beunderstood that various modifications may be made without departing fromthe spirit and scope of the invention. For example, much of thisdocument has been described with respect to a telephone dialingapplication, but other forms of applications and keypad layouts may alsobe addressed, such as keypads involving graphical icons and macros, inaddition to alphanumeric characters.

In addition, the logic flows depicted in the figures do not require theparticular order shown, or sequential order, to achieve desirableresults. In addition, other steps may be provided, or steps may beeliminated, from the described flows, and other components may be addedto, or removed from, the described systems. Accordingly, otherembodiments are within the scope of the following claims.

1. A computer-implemented method for managing software problem reports,the method comprising: receiving, at a central server system, aplurality of software application problem reports from a plurality ofdifferent computing devices that are remote from the central serversystem, the plurality of different computing devices associated withusers other than individuals associated with developer organizationsthat develop particular ones of the plurality of software applications,and the problem reports having been generated automatically by pluralityof computing devices from applications executing on the plurality ofcomputing devices; associating particular ones of the problem reportswith particular applications provided by particular software developers;receiving identification information from one developer of theparticular developers; and in response to receiving the identificationinformation, providing the one of the particular developers withinformation describing problem reports for the particular applicationsmanaged with the central server system by the one developer, wherein thecentral server system manages problem reports for a plurality ofdevelopers that are independent of each other in association with anon-line application store through which the particular applications areavailable for download and purchase by members of the public, includingby the users other than individuals associated with the developerorganizations.
 2. The method of claim 1, wherein the softwareapplication problem reports comprise reports relating to freezes,crashes, and user-generated comments.
 3. The method of claim 1, whereinthe software application problem reports include trace data for a devicethat generated a particular problem report, and information aboutconfiguration of the device.
 4. The method of claim 1, furthercomprising receiving software application uploads from a plurality ofsoftware developers, correlating each uploaded application to adeveloper account for the application, and correlating received problemreports with particular ones of the uploaded applications.
 5. The methodof claim 1, further comprising receiving identification information fromeach of a plurality of developers, and in response, correlatingapplications distributed by the on-line application store for particulardevelopers with accounts for the particular developers, and deliveringthe information describing problem reports to the particular developersfor the particular applications corresponding to the particulardevelopers.
 6. A computer-implemented system for managing softwareproblem reports, the system comprising: one or more computer processors;and one or more computer-readable devices storing instructions that,when executed by the one or more computer processors, implements: aregistration sub-system arranged to register software developers frommultiple different developer organizations; an on-line application storethat makes a plurality of finished applications from a plurality ofapplication developers available for download and purchase by members ofthe public, including by users other than individuals associated withthe developer organizations; an application bug tracker programmed toreceive reports of problems with applications distributed using theon-line application store, to receive data regarding the problems, andto associate the data with a particular application or developer of theparticular application, the reports of problems being generatedautomatically by distributed computing devices that are running theapplications; and a report generator to produce one or more problemreports for a developer that has provided one or more applications, theproblem reports including information about the data regarding theproblems relating to particular applications submitted to the on-lineapplication store by the developer.
 7. The system of claim 6, whereinthe reports of problems include problems selected from the groupconsisting of application crashes, application freezes, excessivebattery usage, and manually-invoked computing device user comments. 8.The system of claim 6, further comprising a bug analyzer programmed toanalyze reports of problems across multiple applications to identifywhether the reports of problems indicate problems with particularcomputing device models or a computer operating system.
 9. The system ofclaim 6, wherein the bug analyzer identifies that reports of problemsindicate problems with particular computing device models or a computeroperating system, by identifying statistically higher reportingfrequencies with a particular device model or operating system version.10. The system of claim 6, wherein the system is arranged to limitinformation provided to the developer based on a trust level thatidentifies how much information about users of the particularapplication that the developer is authorized to obtain.
 11. The systemof claim 6, wherein the system is programmed to limit informationprovided to the developer based on whether the developer is a developerof a core application from an organization that manages an operatingsystem for a device on which a particular problem occurred.
 12. Thesystem of claim 6, wherein the system is arranged to group informationabout problems according to the type of problem.
 13. The system of claim6, wherein the system is arranged to provide, in problem reports,information indicating a device type and operating system identifier fora device on which a particular problem occurred.
 14. The system of claim6, further comprising a developer upload interface that accepts uploadsof applications from developers and correlates each application of theuploaded applications with a developer account through which theapplication was uploaded.
 15. The system of claim 6, wherein the systemis programmed to present to a developer, bugs sorted by a severity levelthat is determined from a rate at which different bugs for theparticular developer occur.
 16. One or more non-transitory tangible,recordable media having recorded thereon instructions, that whenexecuted by one or more processors, perform operations comprising:receiving, at a central server system, a plurality of softwareapplication problem reports from a plurality of different computingdevices that are remote from the central server system, the plurality ofdifferent computing devices associated with users other than individualsassociated with developer organizations that develop particular ones ofthe plurality of software applications, and the problem reports havingbeen generated automatically by plurality of computing devices fromapplications executing on the plurality of computing devices;associating particular ones of the problem reports with particularapplications provided by particular software developers; receivingidentification information from one developer of the particulardevelopers; and in response to receiving the identification information,providing the one of the particular developers with informationdescribing problem reports for the particular applications managed withthe central server system by the one developer, wherein the centralserver system manages problem reports for a plurality of developers thatare independent of each other in association with an on-line applicationstore through which the particular applications are available fordownload and purchase by members of the public, including by the usersother than individuals associated with the developer organizations. 17.The non-transitory tangible media of claim 16, wherein the softwareapplication problem reports comprise reports relating to freezes,crashes, and user-generated comments.
 18. The non-transitory tangiblemedia of claim 16, wherein the software application problem reportsinclude trace data for a device that generated a particular problemreport, and information about configuration of the device.
 19. Thenon-transitory tangible media of claim 16, wherein the operationsfurther comprise receiving software application uploads from a pluralityof software developers, correlating each uploaded application to adeveloper account for the application, and correlating received problemreports with particular ones of the uploaded applications.
 20. Thenon-transitory tangible media of claim 16, wherein the operationsfurther comprise receiving identification information from each of aplurality of developers, and in response, correlating applicationsdistributed by the on-line application store for particular developerswith accounts for the particular developers, and delivering theinformation describing problem reports to the particular developers forthe particular applications corresponding to the particular developers.